www.gusucode.com > Heart Sound Classifier工具箱源码matlab程序代码 > Heart Sound Classifier/HeartSoundClassificationNew/HelperFunctions/plotPredictions.m

    % Matlab script to classify heart sounds with a trained machine learning model
% Sequentially runs prediction on all sound recordings in the
% "demonstration" subdirectory of the "Data" folder.
% Copyright (c) 2016, MathWorks, Inc. 

clc, clear, close all

validation_fds = fileDatastore(fullfile(pwd, 'Data', 'validation'), 'ReadFcn', @importAudioFile, 'FileExtensions', '.wav', 'IncludeSubfolders', 1);

data_dir = fullfile(pwd, 'Data', 'validation');

reference_table_validation = table();
    
% Import ground truth labels (1, -1) from reference. 1 = Normal, -1 = Abnormal
reference_table_validation = importReferencefile([data_dir filesep 'REFERENCE.csv']);

labelMap = containers.Map('KeyType','int32','ValueType','char');
keySet = {-1, 1};
valueSet = {'Normal','Abnormal'};
labelMap = containers.Map(keySet,valueSet);

fig = figure('Name','Heart Sound Classification','NumberTitle','off','Visible','on');

i = 1;
actual = cell(length(validation_fds.Files), 1);
predicted = cell(length(validation_fds.Files), 1);
while hasdata(validation_fds)
    PCG = read(validation_fds);
    
    signal = PCG.data;
    fs = PCG.fs;
    
    % Get the actual classification from reference table
    actual{i} = labelMap(reference_table_validation(strcmp(reference_table_validation.record_name, PCG.filename), :).record_label);
    
    % Get the predicted classification from the heart sound model
    predicted{i} = classifyHeartSounds_mex(signal, fs);
    
    % Display results
    disp(['File: ' PCG.filename 'Actual: ' actual(i) ' --- Predicted: ' predicted(i)])
    
    % Plot signal as well as actual and predicted classification
    ax1 = plot((signal - mean(signal))/std(signal));
    axis tight
    ylim([-10 10])
    xticks([])
    yticks([])
    title('Heart Sound Classification')
    
    dim1 = [.13 .21 0.775 0.1];
    annotation('rectangle',dim1,'FaceColor','green','FaceAlpha',1)
    annotation('textbox',dim1,'String',['Actual: ' actual{i}],'FontSize',15,...
        'HorizontalAlignment','center','VerticalAlignment','middle')
    
    dim2 = [.13 .11 0.775 0.1];
    if strcmp(predicted(i), actual(i))        
        annotation('rectangle',dim2,'FaceColor','green','FaceAlpha',1)
    else
        annotation('rectangle',dim2,'FaceColor','red','FaceAlpha',1)
    end
    annotation('textbox',dim2,'String',['Predicted: ' predicted{i}],'FontSize',15,...
        'HorizontalAlignment','center','VerticalAlignment','middle')
     
    pause(0.25)
    i = i + 1;
end